package com.luoshizhen.lease.web.admin.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.luoshizhen.lease.model.entity.SystemPost;
import com.luoshizhen.lease.model.entity.SystemUser;
import com.luoshizhen.lease.web.admin.mapper.SystemPostMapper;
import com.luoshizhen.lease.web.admin.mapper.SystemUserMapper;
import com.luoshizhen.lease.web.admin.service.SystemUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.luoshizhen.lease.web.admin.vo.system.user.SystemUserItemVo;
import com.luoshizhen.lease.web.admin.vo.system.user.SystemUserQueryVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author liubo
 * @description 针对表【system_user(员工信息表)】的数据库操作Service实现
 * @createDate 2023-07-24 15:48:00
 */
@Service
public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemUser>
        implements SystemUserService {

    @Autowired
    private SystemUserMapper systemUserMapper;

    @Autowired
    private SystemPostMapper systemPostMapper;

    /**
     * 根据查询条件分页获取系统用户列表
     *
     * @param page 分页对象，包含分页参数如当前页码、每页大小等
     * @param queryVo 查询条件对象，包含查询系统用户的各种条件
     * @return 返回一个分页对象，包含系统用户项的Vo列表
     */
    @Override
    public IPage<SystemUserItemVo> pageSystemUserByQuery(IPage<SystemUser> page, SystemUserQueryVo queryVo) {
        return systemUserMapper.pageSystemUserByQuery(page, queryVo);
    }

    /**
     * 根据用户ID获取系统用户信息
     *
     * @param id 用户ID，用于查询特定的系统用户
     * @return 返回包含用户和岗位信息的SystemUserItemVo对象
     */
    @Override
    public SystemUserItemVo getSystemUserById(Long id) {
        // 通过用户ID查询系统用户表，获取系统用户对象
        SystemUser systemUser = systemUserMapper.selectById(id);

        // 根据系统用户对象中的岗位ID查询系统岗位表，获取对应的系统岗位对象
        SystemPost systemPost = systemPostMapper.selectById(systemUser.getPostId());

        // 创建一个SystemUserItemVo对象，用于封装用户和岗位信息
        SystemUserItemVo systemUserItemVo = new SystemUserItemVo();
        // 将系统岗位对象的属性值复制到SystemUserItemVo对象中
        BeanUtils.copyProperties(systemPost, systemUserItemVo);
        // 设置岗位名称，此处实际上是冗余的，因为岗位名称已经通过BeanUtils复制到了systemUserItemVo中
        systemUserItemVo.setPostName(systemUserItemVo.getPostName());

        // 返回填充了用户和岗位信息的SystemUserItemVo对象
        return systemUserItemVo;
    }
}




